package com.sxj.corejava.code09_集合.List;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

/**
 * @author 石小俊
 * 2024年07月24日 9:58
 */
public class Test04_遍历 {

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>(Arrays.asList(1, 4, 7, 3, 9, 8, 10));
        //test01(list);
        //test02(list);
        test03(list);
    }

    /**
     * 普通for循环
     * @param list
     */
    public static void test01(List<Integer> list) {
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i) + "\t");
        }
        // 删除索引为偶数的元素
        for (int i = 0; i < list.size(); i++) {
            if (i % 2 == 0) {
                // 由于删除之后索引会发生变化,因此需要通过降序进行遍历
                // list.remove(i);
            }
        }
        System.out.println("\n" + list);

        for (int i = list.size() - 1; i >= 0; i--) {
            //if(i % 2 == 0){
            //    // 删除索引为偶数的元素
            //    // list.remove(i);
            //}
            // 删除值为偶数的元素
            if (list.get(i) % 2 == 0) {
                list.remove(i);
            }
        }
        System.out.println(list);
        // 删除值为1的元素
        list.remove(new Integer(1));
        System.out.println(list);
    }

    /**
     * 增强for循环
     * @param list
     */
    public static void test02(List<Integer> list) {
        // 增强for循环无法获取索引
        for (Integer num : list) {
            System.out.print(num + "\t");
        }

        // 删除值为偶数的元素
        for (Integer num : list) {
            if (num % 2 == 0) {
                list.remove(num);
            }
        }
        System.out.println("\n" + list);
    }

    /**
     * 迭代器遍历
     * @param list
     */
    public static void test03(List<Integer> list) {
        Iterator<Integer> it = list.iterator();
        // 判断迭代器中是否存在元素
        // 由于需要迭代所有元素,因此每次取出一个之后继续进行判断
        // 一直到迭代器中没有元素为止
        //while (it.hasNext()){
        //   // 从迭代器中取出一个元素
        //   Integer num = it.next();
        //    System.out.print(num+"\t");
        //}
        while (it.hasNext()) {
            Integer num = it.next();
            // 删除偶数的元素
            if (num % 2 == 0) {
                // 无法直接删除
                //list.remove(num);
                // 但是可以通过迭代器提供的方法删除当前取出的元素
                it.remove();
            }
        }
        System.out.println(list);
    }
}
